﻿/*
问题：有 n 盏灯，编号为 1∼n。第 1 个人把所有灯打开，第 2 个人按下所有编号为 2 的倍数的开关（这些灯被关掉），第 3 个人按下所有编号为 3 的倍数的开关（其中关掉的灯将被打开，打开的将被关掉），依次类推。一共有 k 个人，问最后有哪些灯开着？
思路；用一维数组记录灯的状态（1表示开，-1表示关），第1个人打开所有灯，从第2个人开始，每个人操作自己编号倍数的灯，最后输出状态为1的灯编号
注意：栈空间警告 C6262：由于数组大小达到10000，在栈上分配会导致栈空间使用过多；
	  直接遍历所有灯检查倍数关系效率较低，所以for循环跳转至操作人编号倍数，避免不必要的检查
*/
#include<stdio.h>
int main()
{
	int n, k;
	scanf_s("%d %d", &n, &k);
	static int light[10001];
	int person1;
	for (person1 = 1; person1 <= n; person1++)
	{
		light[person1] = 1;
	}
	int person;
	for (person = 2; person <= k; person++)
	{
		int lamp;
		for (lamp = person; lamp <= n; lamp+=person)
		{
			light[lamp] = -light[lamp];
		}
	}
	int i;
	for (i = 1; i <= n; i++)
	{
		if (light[i] == 1)
		{
			printf("%d\n", i);
		}
	}
	return 0;
}